package com.shadow.ignorDependencyInterface.test;

import com.shadow.ignorDependencyInterface.test.pojo.ClassC;
import com.shadow.ignorDependencyInterface.test.pojo.ClassD;
import com.shadow.ignorDependencyInterface.test.pojo.ClassE;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @author VernHe
 * @date 2021年09月16日 12:34
 */
public class Main {
	public static void main(String[] args) {
//		AnnotationConfigApplicationContext applicationContext =
//				new AnnotationConfigApplicationContext(Config.class);
//		ClassA a = (ClassA) applicationContext.getBean("a");
//		a.exec();
		// 往Spring中传入对象的两种方式
		AnnotationConfigApplicationContext applicationContext =
				new AnnotationConfigApplicationContext();
		applicationContext.registerBeanDefinition("11", new GenericBeanDefinition());
		// 放一个BeanDefinition（存在于beanDefinitionMap中）
//		applicationContext.register(ClassC.class);
//		// 往单例池中放一个单例对象（存在于BeanFactory的manualSingletonNames和singletonObjects中）
//		applicationContext.getBeanFactory().registerSingleton("classD", new ClassD());
//		// 执行下面代码后会删除manual..和single..中的"classD"，如果不删除的话，会造成一个beanName对应多个实例
//		applicationContext.registerBeanDefinition("classD",new RootBeanDefinition(ClassE.class));
		Class[] classes = new Class[]{ClassD.class, MyBeanFactoryPostProcessor.class};
		applicationContext.register(classes);
		applicationContext.refresh();
//		applicationContext.getBean("classD");
//		applicationContext.getBean("classD");
//		applicationContext.getBean("classD");
		System.out.println("");
	}
}
